(function(c) {
	var d = {};
	function a(e) {
		return plupload.translate(e) || e
	}
	function b(f, e) {
		e.contents().each(function(g, h) {
			h = c(h);
			if (!h.is(".plupload")) {
				h.remove()
			}
		});
		e
				.prepend('<div class="plupload_wrapper plupload_scroll"><div id="'
						+ f
						+ '_container" class="plupload_container"><div class="plupload"><div class="plupload_header"><div class="plupload_header_content"><div class="plupload_header_title">'
						+ a("Select files")
						+ '</div><div class="plupload_header_text">'
						+ a("Add files to the upload queue and click the start button.")
						+ '</div></div></div><div class="plupload_content"><div class="plupload_filelist_header"><div class="plupload_file_name">'
						+ a("Filename")
						+ '</div><div class="plupload_file_action">&nbsp;</div><div class="plupload_file_status"><span>'
						+ a("Status")
						+ '</span></div><div class="plupload_file_size">'
						+ a("Size")
						+ '</div><div class="plupload_clearer">&nbsp;</div></div><ul id="'
						+ f
						+ '_filelist" class="plupload_filelist"></ul><div class="plupload_filelist_footer"><div class="plupload_file_name"><div class="plupload_buttons"><a href="#" class="plupload_button plupload_add">'
						+ a("Add files")
						+ '</a><a href="#" class="plupload_button plupload_start">'
						+ a("Start upload")
						+ '</a></div><span class="plupload_upload_status"></span></div><div class="plupload_file_action"></div><div class="plupload_file_status"><span class="plupload_total_status">0%</span></div><div class="plupload_file_size"><span class="plupload_total_file_size">0 b</span></div><div class="plupload_progress"><div class="plupload_progress_container"><div class="plupload_progress_bar"></div></div></div><div class="plupload_clearer">&nbsp;</div></div></div></div></div><input type="hidden" id="'
						+ f
						+ '_count" name="'
						+ f
						+ '_count" value="0" /></div>')
	}
	c.fn.pluploadQueue = function(e) {
		if (e) {
			this
					.each(function() {
						var j, i, k;
						i = c(this);
						k = i.attr("id");
						if (!k) {
							k = plupload.guid();
							i.attr("id", k)
						}
						j = new plupload.Uploader(c.extend( {
							dragdrop : true,
							container : k
						}, e));
						d[k] = j;
						function h(l) {
							var n;
							if (l.status == plupload.DONE) {
								n = "plupload_done"
							}
							if (l.status == plupload.FAILED) {
								n = "plupload_failed"
							}
							if (l.status == plupload.QUEUED) {
								n = "plupload_delete"
							}
							if (l.status == plupload.UPLOADING) {
								n = "plupload_uploading"
							}
							var m = c("#" + l.id).attr("class", n).find("a")
									.css("display", "block");
							if (l.hint) {
								m.attr("title", l.hint)
							}
						}
						function f() {
							c("span.plupload_total_status", i).html(
									j.total.percent + "%");
							c("div.plupload_progress_bar", i).css("width",
									j.total.percent + "%");
							c("span.plupload_upload_status", i).text(
									a("Uploaded %d/%d files").replace(
											/%d\/%d/,
											j.total.uploaded + "/"
													+ j.files.length))
						}
						function g() {
							var m = c("ul.plupload_filelist", i).html(""), n = 0, l;
							c
									.each(
											j.files,
											function(p, o) {
												l = "";
												if (o.status == plupload.DONE) {
													if (o.target_name) {
														l += '<input type="hidden" name="'
																+ k
																+ "_"
																+ n
																+ '_tmpname" value="'
																+ plupload
																		.xmlEncode(o.target_name)
																+ '" />'
													}
													l += '<input type="hidden" name="'
															+ k
															+ "_"
															+ n
															+ '_name" value="'
															+ plupload
																	.xmlEncode(o.name)
															+ '" />';
													l += '<input type="hidden" name="'
															+ k
															+ "_"
															+ n
															+ '_status" value="'
															+ (o.status == plupload.DONE ? "done"
																	: "failed")
															+ '" />';
													n++;
													c("#" + k + "_count")
															.val(n)
												}
												m
														.append('<li id="'
																+ o.id
																+ '"><div class="plupload_file_name"><span>'
																+ o.name
																+ '</span></div><div class="plupload_file_action"><a href="#"></a></div><div class="plupload_file_status">'
																+ o.percent
																+ '%</div><div class="plupload_file_size">'
																+ plupload
																		.formatSize(o.size)
																+ '</div><div class="plupload_clearer">&nbsp;</div>'
																+ l + "</li>");
												h(o);
												c(
														"#"
																+ o.id
																+ ".plupload_delete a")
														.click(
																function(q) {
																	c(
																			"#"
																					+ o.id)
																			.remove();
																	j
																			.removeFile(o);
																	q
																			.preventDefault()
																})
											});
							c("span.plupload_total_file_size", i).html(
									plupload.formatSize(j.total.size));
							if (j.total.queued === 0) {
								c("span.plupload_add_text", i).text(
										a("Add files."))
							} else {
								c("span.plupload_add_text", i).text(
										j.total.queued + " files queued.")
							}
							c("a.plupload_start", i)
									.toggleClass(
											"plupload_disabled",
											j.files.length == (j.total.uploaded + j.total.failed));
							m[0].scrollTop = m[0].scrollHeight;
							f();
							if (!j.files.length && j.features.dragdrop
									&& j.settings.dragdrop) {
								c("#" + k + "_filelist").append(
										'<li class="plupload_droptext">'
												+ a("Drag files here.")
												+ "</li>")
							}
						}
						j.bind("UploadFile", function(l, m) {
							c("#" + m.id).addClass("plupload_current_file")
						});
						j
								.bind(
										"Init",
										function(l, m) {
											b(k, i);
											if (!e.unique_names && e.rename) {
												c(
														"#"
																+ k
																+ "_filelist div.plupload_file_name span",
														i)
														.live(
																"click",
																function(s) {
																	var q = c(s.target), o, r, n, p = "";
																	o = l
																			.getFile(q
																					.parents("li")[0].id);
																	n = o.name;
																	r = /^(.+)(\.[^.]+)$/
																			.exec(n);
																	if (r) {
																		n = r[1];
																		p = r[2]
																	}
																	q
																			.hide()
																			.after(
																					'<input type="text" />');
																	q
																			.next()
																			.val(
																					n)
																			.focus()
																			.blur(
																					function() {
																						q
																								.show()
																								.next()
																								.remove()
																					})
																			.keydown(
																					function(
																							u) {
																						var t = c(this);
																						if (u.keyCode == 13) {
																							u
																									.preventDefault();
																							o.name = t
																									.val()
																									+ p;
																							q
																									.text(o.name);
																							t
																									.blur()
																						}
																					})
																})
											}
											c("a.plupload_add", i).attr("id",
													k + "_browse");
											l.settings.browse_button = k
													+ "_browse";
											if (l.features.dragdrop
													&& l.settings.dragdrop) {
												l.settings.drop_element = k
														+ "_filelist";
												c("#" + k + "_filelist")
														.append(
																'<li class="plupload_droptext">'
																		+ a("Drag files here.")
																		+ "</li>")
											}
											c("#" + k + "_container").attr(
													"title", "文件上传队列列表");
											c("a.plupload_start", i)
													.click(
															function(n) {
																if (!c(this)
																		.hasClass(
																				"plupload_disabled")) {
																	if(confirm("确定要上传吗？注意：上传过程中请停止其他操作，否则会造成文件上传失败或文件损坏。是否继续？")){
																		j.start()
																	}else{
																		return;
																	}
																}
																n
																		.preventDefault()
															});
											c("a.plupload_stop", i).click(
													function(n) {
														n.preventDefault();
														j.stop()
													});
											c("a.plupload_start", i).addClass(
													"plupload_disabled")
										});
						j.init();
						j
								.bind(
										"Error",
										function(l, o) {
											var m = o.file, n;
											if (m) {
												n = o.message;
												if (o.details) {
													n += " (" + o.details + ")"
												}
												if (o.code == plupload.FILE_SIZE_ERROR) {
													alert(a("文件已超过限制大小，超出的文件已自动移除"))
												}
												if (o.code == plupload.FILE_EXTENSION_ERROR) {
													alert("文件格式不正确")
												}
												m.hint = n;
												c("#" + m.id).attr("class",
														"plupload_failed")
														.find("a").css(
																"display",
																"block").attr(
																"title", n)
											}
										});
						j
								.bind(
										"StateChanged",
										function() {
											if (j.state === plupload.STARTED) {
												c(
														"li.plupload_delete a,div.plupload_buttons",
														i).hide();
												c(
														"span.plupload_upload_status,div.plupload_progress,a.plupload_stop",
														i).css("display",
														"block");
												c(
														"span.plupload_upload_status",
														i)
														.text(
																"Uploaded "
																		+ j.total.uploaded
																		+ "/"
																		+ j.files.length
																		+ " files");
												if (e.multiple_queues) {
													c(
															"span.plupload_total_status,span.plupload_total_file_size",
															i).show()
												}
											} else {
												g();
												c(
														"a.plupload_stop,div.plupload_progress",
														i).hide();
												c("a.plupload_delete", i).css(
														"display", "block")
											}
										});
						j.bind("QueueChanged", g);
						j.bind("FileUploaded", function(l, m) {
							h(m)
						});
						j
								.bind(
										"UploadProgress",
										function(l, m) {
											c(
													"#"
															+ m.id
															+ " div.plupload_file_status",
													i).html(m.percent + "%");
											h(m);
											f();
											if (e.multiple_queues
													&& j.total.uploaded
															+ j.total.failed == j.files.length) {
												c(
														".plupload_buttons,.plupload_upload_status",
														i).css("display",
														"inline");
												c(".plupload_start", i)
														.addClass(
																"plupload_disabled");
												c(
														"span.plupload_total_status,span.plupload_total_file_size",
														i).hide()
											}
										});
						if (e.setup) {
							e.setup(j)
						}
					});
			return this
		} else {
			return d[c(this[0]).attr("id")]
		}
	}
})(jQuery);